import {BaseDataType} from "./BaseDataType.js";

/**
 * @description Number基本数据类型
 * @class {BaseNumber}
 * @extends {BaseDataType} 数据类型基类方法封装
 * @author hhx
 * @date 2024-10-22 13:37:24
 * @version 0.1.2
 */
class BaseNumber extends BaseDataType {

    /**
     * @description 属性存放
     * @private
     * @type {number} 设置的数字
     */
    _tempNumber = undefined;

    /**
     * @description Number构造方法
     * @public
     * @constructor
     * @param num {number} 设置的数据
     */
    constructor(num) {

        super();

        this._tempNumber = num;
    }

    //========================== 内部方法 ==========================

    /**
     * @description 小数转整数
     * @public
     * @static
     * @param num {string} 转换的数据类型
     * @return {number} 转换后的类型
     */
    static testParseInt(num) {
        return parseInt(num);
    }

    /**
     * @description 将字符串解析为浮点数
     * @public
     * @static
     * @param str {string} 解析的字符串
     * @return {number} 取整后的数字
     */
    static testParseFloat(str) {
        return parseFloat(str);
    }

    //========================== 基础属性 ==========================

    /**
     * @description 获取 临时变量
     * @property
     * @protected
     * @returns {number} 临时变量
     */
    get tempNumber() {
        return this._tempNumber;
    }

    /**
     * @description 设置 临时属性
     * @property
     * @protected
     * @param value {number} 设置的Number类型数据
     */
    set tempNumber(value) {
        this._tempNumber = value;
    }

    //========================== 属性方法 ==========================

    /**
     * @description 获取私有属性
     * @public
     * @returns {number} 私有属性
     */
    getTempNumber() {
        return this.tempNumber;
    }

    /**
     * @description 设置属性值
     * @public
     * @param value {number} 设置的数据
     */
    setTempNumber(value) {
        this.tempNumber = value;
    }

    //========================== 接口 ==========================

    /**
     * @description 截取小数点位数
     * @public
     * @param cut {number} 要截取的数据
     * @return {string} 截取后的数据
     */
    testToFixed(cut) {
        return this.tempNumber.toFixed(cut);
    }

    //========================== 重载方法 ==========================

    /**
     * @description 参数转为字符串
     * @public
     * @override
     * @return {string} 转换后的字符串
     */
    toString() {
        return super.toString(this.tempNumber);
    }

    /**
     * @description 转换成对象的this值
     * @public
     * @override
     * @return {object} Number类型对象
     */
    valueOf() {
        return super.valueOf(this.tempNumber);
    }
}





